<?php

namespace app\lib\exception;

use think\exception\Handle;
use think\Exception;
use think\Request;
use think\Log;
class ExceptionHandler extends Handle
{
    private $code;
    private $msg;
    private $errorCode;
    // 需要url路径

    public function render(\Exception $e)
    {
        if($e instanceof BaseException){
            // 自定义异常
            $this->code = $e->code;
            $this->msg = $e->msg;
            $this->errorCode = $e->errorCode;
        }
        else{
            //服务器错误
            if(config('app_debug')){
               return parent::render($e);
            }else{
                $this->code = 500;
                $this->msg = '服务器错误';
                $this->errorCode = 999;
                $this->recordErrorLog($e);
            }
            
        }
        $request = Request::instance();
        $result=[
            'msg' => $this->msg,
            'error_code' => $this->errorCode,
            'request_url' => $request->url()
        ];
        return json($result,$this->code);
    }

       /*
     * 将异常写入日志
     */
    private function recordErrorLog(\Exception $e)
    {
        log::init([
            'type' => 'File',
            'path' => LOG_PATH,
            'level' => ['error']
        ]);
        Log::record($e->getMessage(), 'error');
    }
}
